// // Copyright (c) 2009 All Right Reserved // // vl // // 2009-01-01 // Contains ... namespace LargoCommon.Composer { using System.IO; using Abstract; using Localization; using Music; /// /// Block Composer. /// public class BlockComposer { #region Public properties /// /// Gets or sets the source block. /// /// /// The source block. /// public MusicalBlock SourceBlock { get; set; } /// /// Gets or sets the composed block. /// /// /// The composed block. /// public MusicalBlock ComposedBlock { get; set; } #endregion #region Public methods - Composition /// /// Prepares the tracks for composition. /// public void PrepareTracksForComposition() { foreach (var line in this.ComposedBlock.Strip.Lines) { if (line == null) { continue; } if (line.Purpose == LinePurpose.Composed) { line.Reset(); } line.FirstStatus.MelodicVariety = new MusicalVariety(MusicalSettings.Singleton); } } /// /// Composes the music. /// /// The given source block. /// /// Returns value. /// public MusicalBundle ComposeMusic(MusicalBlock givenSourceBlock) { this.SourceBlock = givenSourceBlock; this.ComposedBlock = this.SourceBlock; //// var model = HarmonicModel.GetNewModel(this.SourceBlock); this.PrepareTracksForComposition(); ProcessLogger.Singleton.SendLogEvent(this.SourceBlock.Header.Name, LocalizedMusic.String("Initialization..."), 0); BodyComposer bodyComposer = new BodyComposer(); //// Main compositional method. bodyComposer.ComposeMusic(this.ComposedBlock.Body); //// 2019/01 //// When tones are saved without instrument or loudness ... foreach (var bar in this.ComposedBlock.Body.Bars) { bar.SendStatusToTones(); } this.ComposedBlock.ConvertBodyToStrip(true, true); ProcessLogger.Singleton.SendLogEvent(this.SourceBlock.Header.Name, LocalizedMusic.String("Finalization..."), 0); var filename = this.SourceBlock.FullName; int variant = 0; while (File.Exists(filename)) { variant++; filename = this.SourceBlock.FullName + variant.ToString(); } var composedFile = MusicalBundle.GetEnvelopeOfBlock(this.ComposedBlock, filename); return composedFile; } #endregion } }